import traceback
import sys
import os
import tkinter as tk

# 中文显示应该已经在tkinter中支持，不需要额外设置

# 添加src目录到Python路径
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'src'))

# 捕获标准输出和错误，便于分析
sys.stdout = open('debug_output.txt', 'w', encoding='utf-8')
sys.stderr = open('debug_error.txt', 'w', encoding='utf-8')

print("=== 详细调试开始 ===")
print(f"Python版本: {sys.version}")
print(f"当前工作目录: {os.getcwd()}")
print(f"Python路径: {sys.path}")

# 尝试导入必要的模块
print("\n=== 模块导入测试 ===")
try:
    import tkinter as tk
    from tkinter import ttk
    print("✅ 成功导入tkinter")
except Exception as e:
    print(f"❌ 导入tkinter失败: {str(e)}")
    traceback.print_exc()

try:
    from gui.app_library_tab import NodePropertiesEditor
    print("✅ 成功导入NodePropertiesEditor类")
except Exception as e:
    print(f"❌ 导入NodePropertiesEditor失败: {str(e)}")
    traceback.print_exc()

try:
    from gui.main_window import FaceRecognitionGUI, main
    print("✅ 成功导入FaceRecognitionGUI类和main函数")
except Exception as e:
    print(f"❌ 导入FaceRecognitionGUI失败: {str(e)}")
    traceback.print_exc()

# 尝试创建一个最小化的应用程序
try:
    print("\n=== 创建最小化应用程序 ===")
    root = tk.Tk()
    root.title("最小化调试")
    root.geometry("400x300")
    
    # 创建一个简单的Canvas模拟对象
    class MockCanvas:
        def __init__(self):
            self.selected_node = None
            self.current_node = None
            self.current_flow = None
            self.nodes = {}
            
        def bind(self, event, callback, add="+"):
            pass
        
        def redraw_flow(self):
            pass
    
    # 创建一个简单的标签
    label = tk.Label(root, text="程序运行正常")
    label.pack(pady=20)
    
    # 创建一个简单的按钮退出程序
    def quit_app():
        print("用户退出程序")
        root.destroy()
        
    quit_btn = tk.Button(root, text="退出", command=quit_app)
    quit_btn.pack(pady=10)
    
    # 尝试创建NodePropertiesEditor实例
    try:
        mock_canvas = MockCanvas()
        editor = NodePropertiesEditor(root, mock_canvas)
        editor.pack(fill="both", expand=True, padx=10, pady=10)
        print("✅ 成功创建NodePropertiesEditor实例")
        
        # 测试滚动功能
        def test_scroll():
            # 动态添加一些内容来测试滚动
            for i in range(20):
                tk.Label(editor.properties_frame, text=f"测试行 {i}").grid(row=i, column=0, sticky="w", pady=5)
            editor._on_frame_configure(None)  # 触发滚动区域更新
        
        test_btn = tk.Button(root, text="测试滚动", command=test_scroll)
        test_btn.pack(pady=10)
        
    except Exception as e:
        print(f"❌ 创建NodePropertiesEditor实例失败: {str(e)}")
        traceback.print_exc()
    
    print("程序启动成功，可以通过窗口中的按钮测试功能")
    print("按窗口中的'退出'按钮结束程序")
    print("=== 调试结束 ===")
    
    # 刷新输出缓冲区
    sys.stdout.flush()
    sys.stderr.flush()
    
    # 启动主循环
    root.mainloop()
    
except Exception as e:
    print(f"❌ 程序启动失败: {str(e)}")
    traceback.print_exc()
    print("=== 调试结束 ===")

# 恢复标准输出和错误
sys.stdout.close()
sys.stderr.close()
sys.stdout = sys.__stdout__
sys.stderr = sys.__stderr__

# 显示调试结果
print("\n调试输出已保存到 debug_output.txt 和 debug_error.txt")